package com.isc.tcpCommunication03;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 使用字符流
 * 1.编写一个服务器端和客户端
 * 2.服务器端在9999端口监听
 * 3.客户端连接到服务器端，发送"hello,server",并接收服务器端回发的"hello,client",再退出
 * 4.服务器端接收到客户端发送的信息，输出，并发送"hello,client",再退出
 */
public class Server {
    public static void main(String[] args) throws IOException {
        //服务器监听9999端口
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器正在监听9999端口...");

        //建立连接
        //serverSocket 可以通过accept()返回多个Socket(多个客户端连接服务器的并发)
        Socket accept = serverSocket.accept();//已连接套接字

        //使用已连接套接字读取客户端输入流中的数据
        InputStream inputStream = accept.getInputStream();
        //使用转换流把字节流转换成字符流
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        //使用字符流读取数据
        String s = br.readLine();//按行读取必须有一个结束符
        System.out.println("客户端端发送的信息是:" + s);
        System.out.println("读取完毕...");

        //服务器端回发"hello,client"
        OutputStream outputStream = accept.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
        bw.write("hello,client");
        bw.newLine();//写入结束标志
        bw.flush();//使用字符流，需要手动刷新数据，否则数据不会写入
        System.out.println("回发成功...");

        //关闭资源
        br.close();
        bw.close();
        accept.close();
        serverSocket.close();
        System.out.println("服务器断开连接...");
    }
}
